const cosEnv = ['dev', 'test', 'prod', 'pre'].includes(process.env.COS_ENV) ? process.env.COS_ENV : 'local';
console.log(`[vue.config] cosEnv=${cosEnv}`);
const isDevelopment = process.env.COS_ENV === 'dev';

const devApiHost = 'http://10.7.29.42:18827/reconciliation/api'; // 徐扬

const getCosPath = () => {
  const costPathIdx = process.argv.lastIndexOf('--cospath');
  let cosPath = '';
  if (costPathIdx !== -1) {
    const costPathInArgs = process.argv[costPathIdx + 1];
    if (costPathInArgs) {
      cosPath = costPathInArgs.slice().replace(/\/\//g, '/');
    }
  }
  console.log(`[vue.config] cosPath=${cosPath}`);
  return cosPath;
};

const cosPath = getCosPath();
const cdnUrl = `//${cosEnv === 'prod' || cosEnv === 'pre' ? 'static' : `${cosEnv}-static`}.cdn.tencent.com${cosPath}`;
console.log(`[vue.config] cdnUrl=${cdnUrl}`);

const vueWebpackConfig = () => {
  const vueConfig = {
    lintOnSave: true, // 保存时 lint 代码
    publicPath: cosEnv === 'local' ? '/' : cdnUrl,
    assetsDir: 'assets',
    devServer: {
      // 启动服务时自动打开浏览器
      open: true,
      // 本地服务器
      host: '0.0.0.0',
      // 本地默认端口npm
      port: 55559,
      proxy: {
        // 代理 捕获标志
        '/reconciliation/api': {
          logLevel: 'debug',
          // target: 'https://dev-ttp.woa.com/reconciliation/api', // 开发环境
          target: 'https://test-ttp.woa.com/reconciliation/api', // 开发环境
          // target: devApiHost,
          changeOrigin: true, // target 是域名时，必须添加
          secure: false, // 支持https代理
          pathRewrite: {
            '^/reconciliation/api': '',
          },
        },
        '/reconciliationLocal/api': {
          logLevel: 'debug',
          target: devApiHost,
          changeOrigin: true, // target 是域名时，必须添加
          secure: false, // 支持https代理
          pathRewrite: {
            '^/reconciliationLocal/api': '',
          },
        },
      },
    },
    productionSourceMap: isDevelopment, // 是否在构建生产包时生成sourcdeMap
    // 拓展webpack配置
    chainWebpack: (config) => {
      // ============ svg处理 ============
      const svgRule = config.module.rule('svg');
      // 清除已有的所有 loader。
      // 如果你不这样做，接下来的 loader 会附加在该规则现有的 loader 之后。
      svgRule.uses.clear();
      // 添加要替换的 loader
      svgRule.use('svg-sprite-loader').loader('svg-sprite-loader').options({
        symbolId: 'icon-[name]',
      });
      // 关闭对 node_modules 的 TypeScript 校验
      config.module
        .rule('ts')
        .use('ts-loader')
        .tap((options) => {
          options.transpileOnly = true; // 仅转译，不校验
          options.happyPackMode = true; // 并行处理（可选）
          return options;
        });

      // 如果你使用 fork-ts-checker-webpack-plugin（默认启用）
      // 可以关闭对依赖的类型检查
      // config.plugin('fork-ts-checker').tap((args) => {
      //   args[0].reportFiles = ['src/**/*.{ts,tsx}']; // 仅检查源码
      //   return args;
      // });
    },
  };

  return vueConfig;
};

module.exports = vueWebpackConfig();
